namespace SDKLibrary
{
    /// <summary>
    /// device class, representing specific device .
    /// </summary>
    public class Device
    {

        /// <summary>
        /// Current file upload list.
        /// </summary>
        public List<UploadFileInfo> UploadItems { get; private set; }

        /// <summary>
        /// Get device information.
        /// </summary>
        /// <returns></returns>
        public DeviceInfo GetDeviceInfo();

        /// <summary>
        /// Send data from xml.
        /// </summary>
        /// <param name="xml">xml data</param>
        /// <param name="useCurrentSdkGuid">Whether to use the current Sdk GUID, the default is true, because each time the connection is established, the Sdk GUID is different, so you need to replace the sdkGUID in the document with the current SdkGUID.</param>
        public void SendFromXml(string xml, bool useCurrentSdkGuid = true); 

        /// <summary>
        /// Add an upload file.
        /// </summary>
        /// <param name= "filePath">filepath</param>
        /// <param name= "type">filetype</param>
        /// <returns>Returns the object that holds the uploaded file information.</returns>
        public UploadFileInfo AddUploadFile(string filePath, HFileType type = HFileType.kauto);

        /// <summary>
        /// Start uploading files.
        /// </summary>
        /// <param name="fileinfo"></param>
        public void StartUploadFile();

        /// <summary>
        /// Get Ethernet network address information.
        /// </summary>
        public void GetEthernetInfo();

        /// <summary>
        /// Set Ethernet network address information.
        /// </summary>
        public void SetEthernetInfo(EthernetInfo info);

        /// <summary>
        /// Get wifi information.
        /// </summary>
        public void GetWifiInfo();

        /// <summary>
        /// Set wifi information.
        /// </summary>
        public void SetWifiInfo(WifiInfo info);

        /// <summary>
        /// Get brightness information.
        /// </summary>
        public void GetLuminanceInfo();

        /// <summary>
        /// Set brightness information.
        /// </summary>
        /// <param name= "luminanceInfo">brightnessinformation</param>
        public void SetLuminanceInfo(LuminanceInfo luminanceInfo);

        /// <summary>
        /// Get time information.
        /// </summary>
        public  void GetTimeInfo();

        /// <summary>
        /// Set time information.
        /// </summary>
        /// <param name="timeInfo"></param>
        public void SetTimeInfo(TimeInfo timeInfo);

        /// <summary>
        /// Open screen.
        /// </summary>
        public void OpenScreen();

       /// <summary>
       /// Close screen.
       /// </summary>
        public void CloseScreen();

        /// <summary>
        /// Get the switch information.
        /// </summary>
        public void GetSwitchTimeInfo();

        /// <summary>
        /// Set the switch information.
        /// </summary>
        /// <param name="switchTimeInfo"></param>
        public void SetSwitchTimeInfo(SwitchTimeInfo switchTimeInfo);

        /// <summary>
        /// Get the boot logo information.
        /// </summary>
        public void GetBootLogoInfo();

        /// <summary>
        /// Set the boot logo information.
        /// </summary>
        /// <param name="bootLogo"></param>
        public void SetBootLogoInfo(BootLogoInfo bootLogo);

        /// <summary>
        /// Send screen (re-refresh all programs)
        /// </summary>
        /// <param name="screen"></param>
        /// <returns></returns>
        public string SendScreen(HdScreen screen);

        /// <summary>
        /// Update specified program
        /// </summary>
        /// <param name="program"></param>
        /// <returns></returns>
        public string UpdateDeviceProgram(HdProgram program);

        /// <summary>
        /// Delete specified program
        /// </summary>
        /// <param name="program"></param>
        /// <returns></returns>
        public string DeleteDeviceProgram(HdProgram program);

        /// <summary>
        /// Get font information.
        /// </summary>
        public  void GetDeviceFontInfo();

        /// <summary>
        /// Get TCP server information.
        /// </summary>
        public void GetTcpServerInfo();

        /// <summary>
        /// Set TCP server information.
        /// </summary>
        /// <param name="info"></param>
        public void SetTcpServerInfo(ServerInfo info);

        /// <summary>
        /// Delete files that have been uploaded to the device.
        /// </summary>
        /// <param name= "fileNames">flielist</param>
        public void DeleteFile(List<string> fileNames);

        /// <summary>
        /// Delete a file that has been uploaded to the device.
        /// </summary>
        /// <param name= "fileName">filename</param>
        public void DeleteFile(string fileName);

        /// <summary>
        /// Read back the list of files that have been uploaded to the device.
        /// </summary>
        public void ReadbackFileList();

        /// <summary>
        /// Close the current device connection.
        /// </summary>
        public void Close();

        /// <summary>
        /// Get the file type based on the file path.
        /// </summary>
        /// <param name= "filePath">filepath</param>
        /// <returns></returns>
        static public HFileType GetHFileType(string filePath);

      ///...................................

   }

}